﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Minestorm.Evolved.IoC
{
	public interface IObjectFactory : IDisposable
	{
		void RegisterConcreteType<I, C>()
			where I : class
			where C : class, I;

		void RegisterSingleton<I, C>()
			where I : class
			where C : class, I;

        void RegisterSingleton<I, C>(C instance)
			where I : class
			where C : class, I;

		void RegisterMany(Action<IObjectFactory> factory);

		Boolean IsTypeRegistered<I>()
			where I : class;

        I InstanceOf<I>()
            where I : class;
	}
}
